[Android][Framework]使用bootchart分析开机数据


Mac安装Bootchart

下载

通过下面链接下载bootchart源码:bootchart-0.9.tar.bz2

安装

解压缩,因为是ant构建的,需要安装ant

brew install ant

进入源码目录,执行

ant

目录会生成bootchart.jar

使用

然后手机开启Bootchart的过程最终会生成bootchart.tgz的文件,这个文件就是要处理的源文件,通过下面命令,可以在当前目录生成png图片。

java  -jar   bootchar.jar   /path/to/bootchart.tgz

Android开启Bootchart

在旧版Android中(6.0之前版本)需要修改一些文件,重新编译boot.img才可以开启bootchart,这个修改方法可以上网搜索一下。现在的Android系统已经配置好bootchart,只需要做以下操作就可以启动:

//在data/bootchart/目录中新建start文件
adb shell 'touch /data/bootchart/start'
/*
* 在start文件中写入采用时间timeout=120s
* 这里的时间可以自定义,通过查看源代码可知最长时间不能超过10*60 s
 */
adb shell 'echo 120 > /data/bootchart/start'
//在data/bootchart/目录中新建stop文件
adb shell 'touch /data/bootchart/stop'
//在stop文件中写入1标记,用于停止采集数据
adb shell 'echo 1 > /data/bootchart/stop'

重启之后,看到/data/bootchart/目录下文件为:

header 
kernel_pacct 
proc_diskstats.log 
proc_ps.log 
proc_stat.log 
start

那可以看到stop文件消失了。所以这里需要注意把start文件也删除,不然下次重启手机又会启动bootchart,而启动它是要耗费资源的。

采集数据

可以把生成出来的5个文件pull出来打包,也可以使用系统提供的脚本做这个操作。系统脚本在 AOSP/system/core/init/grab-bootchart.sh。我把脚本放在前面bootchart源码目录中,然后做了一些修改以适应我的开发环境。

#!/bin/sh
#
# This script is used to retrieve a bootchart log generated by init.
# All options are passed to adb, for better or for worse.
# See the readme in this directory for more on bootcharting.

TMPDIR=~/Temp
rm -rf $TMPDIR
mkdir -p $TMPDIR
# log在手机的路径
LOGROOT=/data/bootchart
TARBALL=bootchart.tgz
# 5个文件
FILES="header proc_stat.log proc_ps.log proc_diskstats.log kernel_pacct"
# 把文件pull到本地电脑
for f in $FILES; do
    adb "${@}" pull $LOGROOT/$f $TMPDIR/$f 2>&1 > /dev/null
done
# 文件打包
(cd $TMPDIR && tar -czf $TARBALL $FILES)
#bootchart ${TMPDIR}/${TARBALL}
#gnome-open ${TARBALL%.tgz}.png
# 通过bootchart源码生成png  这和linux环境不一样
java -jar bootchart.jar ${TMPDIR}/bootchart.tgz
rm -rf $TMPDIR
echo "./${TARBALL%.tgz}.png is generated"

这样就能生成直观的开机状态统计图了。

Bootchart分析Android6.0开机性能

Android7.0 bootchart工具使用说明


文章作者: Wossoneri
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明来源 Wossoneri !
评论
  目录